date: 2017-06-12 14:59:44
tags: CTF
第一&二题Web(不是原题但类似)
题目说这个过滤了很多敏感符号,于是先构造一下常用的payload:
Username:’ or 1=1 #
Password:随意
发现or 和 #都被过滤掉了,通过测试发现–也被过滤了,看起来是很可怕,但是不过幸好’没有被过滤,于是构造一个payload:
- username=travis’=’(一般数据库里不可能有这个小名)
- password=travis’=’
这个时候成果获得flag
为什么这样可以绕过呢?
当提交username=travis’=’&password=travis’=’
语句会变成如下:
- select * from user where username=’travis’=’’ and password=’travis’=’’
这时候还不够清晰,提取前一段判断出来(后面的同样道理)
username=’travis’=’’
这是有2个等号,然后计算顺序从左到右,
先计算username=’travis’ 一般数据库里不可能有这个小名(若有,就换一个字符串),所以这里返回值为0(相当于false)
然后0=’’ 这个结果呢?就是返回1(相当于true)
所以这样的注入相当于
select from user where 1 and 1
也等于 select from user
上面那个比较是弱类型的比较,
以下情况都会为true
- 1=’1’
- 1=’1.0’
- 1=’1后接字母(再后面有数字也可以)
- ‘0=’除了非0数字开头的字符串’
(总体上只要前面达成0的话,要使语句为true很简单,所以这题的万能密码只要按上面的法子去写可以写很多)
第三题(文件上传)
随便挑一个小文件,发现它对上传的文件有一定要求:要上传php文件,但是文件类型只支持jpg,gif,png.
所以想到了00截断:
%00截断的核心,就是chr(0)这个字符
先说一下这个字符,这个字符不为空(Null),也不是空字符(“”),更不是空格!
当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生
|
|
就这段代码中的path为上传的路径,file为生成的文件名,upfilename为上传后的地址,程序表面是没什么问题,但如果path可以由用户自定义(path这个参数往往是从表单或参数传过来的,能够自定义),所以就产生了上传路径截断漏洞
比如我在表单中把路径改成了“upfiles/1.aspChr(0)”
这样上传路径就成了 path=”upfiles/1.aspChr(0)” chr(0)代表那个截断字符
这时变量被输出时,就成了upfiles/1.asp
而不是upfiles/upfiles/1.aspChr(0)20121212.jpg
很明显,upfile/1.asp就成了she11
你可以马上做个实验
把上面的代码修改一下:
|
|
眼见为实,你会发现最后输出的upfilename确实是upfile/1.asp,变量输出是这样,上传时生成文件当然也会这样,这就是大家常听到的路径截断上传!
回到题中:
我们可以在burp中修改path参数~
打开burp:
发现 path=“/uploads/”
文件名 filename=“1493190357627.gif”(gif满足文件要求)
本来最后的上传地址:path & filename
/uploads/1493190357627.gif
如果加上%00截断呢?
/uploads/1.php%001493190357627.gif
[第四题] (http://www.shiyanbar.com/ctf/1848)
这个很详细链接